******************************************************************
** titre: code pour générer le .dta Daoust et Guévremont (2025) **
** date: avril 2025										        **
******************************************************************

* ---------------
* 1. Set up 
* ---------------

*Working directory
import excel "Resultats_electoraux_Qc.xlsx", sheet("Feuil1") firstrow clear

gen elecid = election_annee

rename pacq_total_candidatures pcaq_total_candidatures

* ------------------------------------------
* 2. Calculs variables
* ------------------------------------------

*Partis qui ont déjà eu des sièges (acronymes): CAQ, PLQ, QS, PQ, ADQ, ALN, BP, CCF, LNA, PE, OUV, CON, PNP, RAC, UN, IND, LII, LIOP

global party_list "plq pq adq npd pln pe psq ver pci pca rdc dq pin pec pml pco ind dso bpo ufp pdc qs pu tra ppc pind p51 csu mso lib soc un phu sd pcoo ldc rac pnp ade mis pqi lso rin ran con so dee dvi lii acp uni com lir sdo caf uno ouv pna oup ude ccf ffci bp oui cdp nid bpi aln alni libo coni oum liop fero ouvo libd lna nat pdur prep verq caq opn pcq cpc pnul eqa ucq pcmq pun qrd pequ psp mpq cpq plib cipq apq vp pcuq pcaq cq bm dd uff phq afc plibq pape"


*********************
** Nombre effectif **
**     de partis   **
*********************
*Lorsque nécessaire, le nombre de sièges conservés est la valeur la plus élevée (1900-1944)

*Seat share
*Loop pour faire la sommation (seat)
gen sum_nep_seat = 0 

foreach p of global party_list {

bysort elecid: replace sum_nep_seat = sum_nep_seat + (`p'_seat_share/100)^2
}

gen nep_seat = 1/sum_nep_seat

*Vote_share
*Loop pour faire la sommation (vote)
gen sum_nep_vote = 0 

foreach p of global party_list {

bysort elecid: replace sum_nep_vote = sum_nep_vote + (`p'_vote_share/100)^2
}

gen nep_vote = 1/sum_nep_vote



*********************
*Disproportionnalité*
*********************

*Loop pour faire la sommation
gen sum_gallagher = 0

foreach p of global party_list {

bysort elecid: replace sum_gallagher = sum_gallagher + (`p'_seat_share - `p'_vote_share)^2
}

*Calcul indice 
gen gallagher = sqrt((sum_gallagher)/2)



*********************
**   Volatilité    **
*********************
tsset elecid

*Loop pour faire la sommation des écarts (vote)
gen sum_pedersen_vote = 0

foreach p of global party_list {

replace sum_pedersen_vote = sum_pedersen_vote + abs(`p'_vote_share - `p'_vote_share[_n-1])  
}

*Calcul indice Pedersen (vote)
gen pedersen_vote = sum_pedersen_vote/2



*Loop pour faire la sommation des écarts (seat)
gen sum_pedersen_seat = 0

foreach p of global party_list {

replace sum_pedersen_seat = sum_pedersen_seat + abs(`p'_seat_share - `p'_seat_share[_n-1])  
}

*Calcul indice Pedersen (vote)
gen pedersen_seat = sum_pedersen_seat/2



* ------------------------------------------
* 3. Sauvegarder
* ------------------------------------------

*1900-2022
*Renommer les indicateurs
label variable nep_seat "ENP (seats)"
label variable nep_vote "ENP (votes)"
label variable gallagher "Gallagher index"
label variable pedersen_vote "Pedersen index (votes)"
label variable pedersen_seat "Pedersen index (seats)"

save "Qc_resultats_elections_1900-2022.dta", replace
	